package com.malou.client.seguridad.menu;

import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;

import com.extjs.gxt.ui.client.data.ModelIconProvider;
import com.extjs.gxt.ui.client.data.TreeLoader;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.TreePanelEvent;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.malou.client.Malou;

public class MenuLateral extends VerticalPanel {
	private MenuServiceAsync ms = GWT.create(MenuService.class);
	TreeLoader<MenuOpciones> loader;
	public Malou malou;
	public TreePanel<MenuOpciones> tree;
	
	public MenuLateral(Integer usuario_logueado_id){
		if (ms == null) {
			ms = GWT.create(MenuService.class);
		}
		
		Menus.menuLateral = this;
		//Menus.list();
		Menus.getMenusPermitidos(usuario_logueado_id);
		
		Menus.storeLateral = new TreeStore<MenuOpciones>();
		
		tree = new TreePanel<MenuOpciones>(Menus.storeLateral);  
	    
	    tree.setDisplayProperty("menu"); 
	    tree.setWidth(200);
		
	    /*RpcProxy<MenuOpciones> proxy = new RpcProxy<MenuOpciones>() {        
			@Override
	        public void load(Object loadConfig, AsyncCallback<MenuOpciones> callback) {
	          ms.getMenu((MenuOpciones) loadConfig, null, null, callback);				
	        }
	      };    
	    
	    TreeModelReader<List<MenuOpciones>> reader = new TreeModelReader<List<MenuOpciones>>();
	    
	    
	      loader = new BaseTreeLoader<MenuOpciones>(proxy,reader){
	    	  @Override
	    	  public boolean hasChildren(MenuOpciones parent) {	    		  	    		  
	    	    return parent.get("parametro").equals("");
	    	  }
	      };	    
	    
	    TreeStore<MenuOpciones> store = new TreeStore<MenuOpciones>(loader);
	    
	    store.setKeyProvider(new ModelKeyProvider<MenuOpciones>() {  
	      public String getKey(MenuOpciones model) {  
	         return "node_" + model.get("id");  
	      }  
	    });  
		tree = new TreePanel<MenuOpciones>(store);
		
		tree.setStateful(true);
				
		tree.setId("id");
	    tree.setDisplayProperty("menu");  
	    tree.setWidth(200);
	    */
	    tree.setIconProvider(new ModelIconProvider<MenuOpciones>() {  
	      public AbstractImagePrototype getIcon(MenuOpciones model) {
	    	  String url = model.getParametro();
	    	  
	        if (!url.equals("")) {
	        	return IconHelper.createPath("images/icons/table.png");
	        }  
	        return null;  
	      }  
	    });
	    
	    tree.addListener(Events.OnClick, new Listener<TreePanelEvent<MenuOpciones>>() {
            public void handleEvent(TreePanelEvent<MenuOpciones> be) {
                // do something here
            	MenuOpciones item = be.getItem();
            	if(!item.getParametro().equals("")){
            		if(malou.center.getItemByItemId(item.getParametro()) == null){
            		TabItem pti = new TabItem(item.getMenu());
            		pti.setItemId(item.getParametro());//el id del tab sera el parametro del menu (los parametros deben ser unicos)
            		
            		pti.setClosable(true);
            		pti.setData("itemmenu", item);
            		malou.center.add(pti);
            		if(item.permisos != null)
            			malou.permisos = item.permisos;
            		malou.loadProgram(pti);
            		
            		//System.out.println(item.permisos);
            		}
            		malou.center.setSelection(malou.center.getItemByItemId(item.getParametro()));
            	}            	
            };
        });

	       
	    addStyleName("x-small-editor");	  	       
	    add(tree);
	    
	    //setScrollMode(Scroll.AUTOY);
	}	
	
}
